home *** CD-ROM | disk | FTP | other *** search
- unit ClipEg2U;
-
- interface
-
- uses
- WinProcs, WinTypes, Messages, SysUtils, Classes, Graphics, Controls,
- Forms, Dialogs, ExtCtrls, StdCtrls, Spin;
-
- type
- TForm1 = class(TForm)
- btnCopy: TButton;
- btnPaste: TButton;
- SpinEdit1: TSpinEdit;
- SpinEdit2: TSpinEdit;
- Edit1: TEdit;
- Memo1: TMemo;
- procedure FormCreate(Sender: TObject);
- procedure btnCopyClick(Sender: TObject);
- procedure btnPasteClick(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- TDataRecord = packed record
- Number1, Number2: Longint;
- AString: String[255];
- end;
-
- var
- Form1: TForm1;
- CF_CLINICRECORD: Word;
-
- implementation
-
- uses
- Clipbrd;
-
- {$R *.DFM}
-
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- CF_CLINICRECORD := RegisterClipboardFormat('Clinic Data Record');
- end;
-
- procedure TForm1.btnCopyClick(Sender: TObject);
- var
- Data: THandle;
- DataPtr: Pointer;
- DataRec: TDataRecord;
- begin
- { Open clipboard for several formats to be added }
- Clipboard.Open;
- try
- { Allocate appropriate memory block }
- Data := GlobalAlloc(GMEM_MOVEABLE, SizeOf(DataRec));
- try
- { Lock memory block }
- DataPtr := GlobalLock(Data);
- try
- { Set the record up }
- DataRec.Number1 := SpinEdit1.Value;
- DataRec.Number2 := SpinEdit2.Value;
- DataRec.AString := Edit1.Text;
- { Copy record to locked memory block }
- Move(DataRec, DataPtr^, SizeOf(DataRec));
- { Copy block into clipboard }
- Clipboard.SetAsHandle(CF_CLINICRECORD, Data);
- { Add a nice textual version into clipboard }
- Clipboard.AsText := Format(
- 'Number 1: %d'#13#10'Number 2: %d'#13#10'AString: %s',
- [DataRec.Number1, DataRec.Number2, DataRec.AString])
- finally
- { Unlock memory block }
- GlobalUnlock(Data)
- end
- except
- { Normally don't free this memory - it }
- { belongs to the clipboard. But if there's }
- { an error, then do the rightful thing }
- GlobalFree(Data);
- raise
- end
- finally
- { Close clipboard }
- Clipboard.Close
- end
- end;
-
- procedure TForm1.btnPasteClick(Sender: TObject);
- var
- Data: THandle;
- DataPtr: Pointer;
- DataRec: TDataRecord;
- begin
- Clipboard.Open;
- try
- { Get memory block handle }
- Data := Clipboard.GetAsHandle(CF_CLINICRECORD);
- { Turn it into a pointer by locking it }
- DataPtr := GlobalLock(Data);
- try
- { Get data record and update UI }
- Move(DataPtr^, DataRec, SizeOf(DataRec));
- SpinEdit1.Value := DataRec.Number1;
- SpinEdit2.Value := DataRec.Number2;
- Edit1.Text := DataRec.AString;
- { Don't forget the textual version }
- Memo1.Text := Clipboard.AsText;
- finally
- { Unlock memory block }
- GlobalUnlock(Data)
- end
- finally
- Clipboard.Close
- end;
- end;
-
- end.
-